package co.yixiang.yshop.module.product.service.storeproductassureref;

import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.module.product.controller.admin.storeproductassure.vo.StoreProductAssureRespVO;
import co.yixiang.yshop.module.product.controller.admin.storeproductassureref.vo.StoreProductAssureRefCreateReqVO;
import co.yixiang.yshop.module.product.controller.admin.storeproductassureref.vo.StoreProductAssureRefExportReqVO;
import co.yixiang.yshop.module.product.controller.admin.storeproductassureref.vo.StoreProductAssureRefPageReqVO;
import co.yixiang.yshop.module.product.controller.admin.storeproductassureref.vo.StoreProductAssureRefUpdateReqVO;
import co.yixiang.yshop.module.product.dal.dataobject.storeproductassureref.StoreProductAssureRefDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 商品保障服务关联 Service 接口
 *
 * @author admin
 */
public interface StoreProductAssureRefService {

    /**
     * 创建商品保障服务关联
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createStoreProductAssureRef(@Valid StoreProductAssureRefCreateReqVO createReqVO);

    /**
     * 更新商品保障服务关联
     *
     * @param updateReqVO 更新信息
     */
    void updateStoreProductAssureRef(@Valid StoreProductAssureRefUpdateReqVO updateReqVO);

    /**
     * 删除商品保障服务关联
     *
     * @param id 编号
     */
    void deleteStoreProductAssureRef(Long id);

    /**
     * 获得商品保障服务关联
     *
     * @param id 编号
     * @return 商品保障服务关联
     */
    StoreProductAssureRefDO getStoreProductAssureRef(Long id);

    /**
     * 获得商品保障服务关联列表
     *
     * @param ids 编号
     * @return 商品保障服务关联列表
     */
    List<StoreProductAssureRefDO> getStoreProductAssureRefList(Collection<Long> ids);

    /**
     * 获得商品保障服务关联分页
     *
     * @param pageReqVO 分页查询
     * @return 商品保障服务关联分页
     */
    PageResult<StoreProductAssureRefDO> getStoreProductAssureRefPage(StoreProductAssureRefPageReqVO pageReqVO);

    /**
     * 获得商品保障服务关联列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 商品保障服务关联列表
     */
    List<StoreProductAssureRefDO> getStoreProductAssureRefList(StoreProductAssureRefExportReqVO
                                                                           exportReqVO);

    /**
     * 保存商品保障服务关联
     * @param assureIdList 保障服务id集合
     * @param productId 商品id
     * @param isAdd 是否新增
     */
    void saveProductAssureRef(List<Long> assureIdList, Long productId, boolean isAdd);

    List<Long> getAssureIdListByProductId(Long productId);

    List<StoreProductAssureRespVO> getAssureListByProductId(Long productId);
}
